package com.example.orc.util;

import net.sourceforge.tess4j.ITesseract;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;

import java.io.File;
import java.net.URISyntaxException;

public class OctUtil {
    // 图片预处理代码示例
    /*
        // 识别图片的文件（修改为自己的图片路径）
        String imagePath = ClassLoader.getSystemResource("tupian/9188.png").getPath();
        if (imagePath.length() > 0) {
            imagePath = imagePath.substring(1);
        }
        System.out.println("imagePath:" + imagePath);
        File file = new File(imagePath);

        // 图片转图片流
        BufferedImage img = ImageIO.read(file);

        // 这里对图片黑白处理,增强识别率.这里先通过截图,截取图片中需要识别的部分
        img = ImageHelper.convertImageToGrayscale(img);

        // 图片锐化,自己使用中影响识别率的主要因素是针式打印机字迹不连贯,所以锐化反而降低识别率
        img = ImageHelper.convertImageToBinary(img);

        // 图片放大5倍,增强识别率(很多图片本身无法识别,放大7倍时就可以轻易识,但是考滤到客户电脑配置低,针式打印机打印不连贯的问题,这里就放大7倍)
        img = ImageHelper.getScaledInstance(img, img.getWidth() * 7, img.getHeight() * 7);
     */

    // 执行OCR识别
    public static void execute(File file, String language) throws TesseractException, URISyntaxException {
        ITesseract instance = new Tesseract();
        // 设置语言库位置
        instance.setDatapath(new File(OctUtil.class.getResource("/").toURI()).getAbsolutePath());
        // 设置语言
        if (language != null) {
            instance.setLanguage(language);
        }
        String result = instance.doOCR(file);
        System.out.println("OCR识别结果"+language+"如下:\n"+result+"\n识别结束\n");
    }

}
